package com.suray.system.run.data.mysql.analyze;

import com.suray.system.run.core.ChargeInfo;
import com.suray.system.run.core.ErrorDescription;
import com.suray.system.run.core.LowBatteryDescription;
import com.suray.system.run.core.OfflineDescription;
import com.suray.system.run.data.DeviceTaskInformation;
import com.suray.system.run.data.mysql.device.entity.LowBatteryDB;
import com.suray.system.run.data.mysql.device.entity.OffLineDesDB;
import com.suray.system.run.type.DeviceType;
import com.suray.system.run.util.ExecTaskTime;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

public class DeviceDataStore {
    /**
     * 小车设备任务信息数据管理
     */
    private DeviceTaskInforMationStore deviceTaskInforMationStore;

    /**
     * 小车异常信息数据管理
     */
    private ErrorDescriptionStore errorDescriptionStore;

    /**
     * 小车当前执行任务数据管理
     */
    private ExecTaskDataStore execTaskDataStore;

    /**
     * 小车离线数据管理
     */
    private OffLineDesDataStore offLineDesDataStore;

    /**
     * 小车低电量信息数据管理
     */
    private LowBatteryDataStore lowBatteryDataStore;

    private ChargeInfoDataStore chargeInfoDataStore;

    public DeviceDataStore(String series, DeviceType deviceType) {
        this.deviceTaskInforMationStore = new DeviceTaskInforMationStore(series, deviceType);
        this.errorDescriptionStore = new ErrorDescriptionStore(series, deviceType);
        this.execTaskDataStore = new ExecTaskDataStore(series, deviceType);
        this.offLineDesDataStore = new OffLineDesDataStore(series, deviceType);
        this.lowBatteryDataStore = new LowBatteryDataStore(series, deviceType);
        this.chargeInfoDataStore = new ChargeInfoDataStore(series, deviceType);
    }

    /**
     * 查找当前的异常数据
     * @return
     */
    public ErrorDescription findErrorDesData() {
        return errorDescriptionStore.findErrorDesData();
    }

    /**
     * 创建异常数据
     * @return
     */
    public ErrorDescription createErrorDesData() {
        return errorDescriptionStore.createErrorDesData();
    }

    /**
     * 更新异常数据
     * @return
     */
    public boolean updateErrorDesData() {
        return errorDescriptionStore.updateErrorDesData();
    }

    /**
     * 查找设备任务数据
     * 如果数据不存在则创建数据
     * @return
     */
    public DeviceTaskInformation findDeviceTaskInfoData() {
        return deviceTaskInforMationStore.findDeviceTaskInfoData();
    }

    /**
     * 更新设备任务信息
     * @return
     */
    public boolean updateDeviceTaskInfoData() {
        return deviceTaskInforMationStore.updateDeviceTaskInfoData();
    }

    /**
     * 查找当前执行的任务
     * @return
     */
    public ExecTaskTime findExecTaskData() {
        return execTaskDataStore.findExecTaskData();
    }

    /**
     * 创建当前小车执行的任务
     * @return
     */
    public ExecTaskTime createExecTaskData() {
        return execTaskDataStore.createExecTaskData();
    }

    /**
     * 更新当前小车执行的任务
     * @return
     */
    public boolean updateExecTaskData() {
        return execTaskDataStore.updateExecTaskData();
    }

    /**
     * 查找当前的离线信息
     * @return
     */
    public OffLineDesDB findOffLineDesData() {
        return offLineDesDataStore.findOffLineDesData();
    }

    /**
     * 创建当前小车离线信息
     * @return
     */
    public OffLineDesDB createOffLineDesData() {
        return offLineDesDataStore.createOffLineDesData();
    }

    /**
     * 更新当前小车离线信息
     * @return
     */
    public boolean updateOffLineDesData() {
        return offLineDesDataStore.updateOffLineDesData();
    }

    /**
     * 查找当前的低电量信息
     * @return
     */
    public LowBatteryDB findLowBatteryData() {
        return lowBatteryDataStore.findLowBatteryData();
    }

    /**
     * 创建当前小车低电量信息
     * @return
     */
    public LowBatteryDB createLowBatteryData() {
        return lowBatteryDataStore.createLowBatteryData();
    }

    /**
     * 更新当前小车低电量信息
     * @return
     */
    public boolean updateLowBatteryData() {
        return lowBatteryDataStore.updateLowBatteryData();
    }

    /**
     * 查找小车当前充电信息
     * @return
     */
    public ChargeInfo findChargeInfoData() {
        return chargeInfoDataStore.findChargeInfoData();
    }

    /**
     * 创建小车当前充电信息
     * @return
     */
    public ChargeInfo createChargeInfoData() {
        return chargeInfoDataStore.createChargeInfoData();
    }

    /**
     * 更新小车当前充电信息
     * @return
     */
    public boolean updateChargeInfoData() {
        return chargeInfoDataStore.updateChargeInfoData();
    }

    /**
     * 获取小车所有异常
     * @return
     * @param startTime
     * @param endTime
     */
    public List<ErrorDescription> getErrorDesList(Date startTime, Date endTime) {
        return new ArrayList<>(errorDescriptionStore.getErrorDesList(startTime, endTime));
    }

    /**
     * 获取小车所有离线信息
     * @param startTime
     * @param endTime
     * @return
     */
    public List<OfflineDescription> getOffLineList(Date startTime, Date endTime) {
        return new ArrayList<>(offLineDesDataStore.getOffLineList(startTime, endTime));
    }

    /**
     * 获取小车所有低电量信息
     * @param startTime
     * @param endTime
     * @return
     */
    public List<LowBatteryDescription> getLowBatteryInfoList(Date startTime, Date endTime) {
        return new ArrayList<>(lowBatteryDataStore.getLowBatteryInfoList(startTime, endTime));
    }

    /**
     * 获取小车所有充电信息
     * @param startTime
     * @param endTime
     * @return
     */
    public List<ChargeInfo> getChargeInfoList(Date startTime, Date endTime) {
        return new ArrayList<>(chargeInfoDataStore.getChareInfoList(startTime, endTime));
    }

    /**
     * 获取小车故障次数
     * @return
     */
    public int getErrorNum() {
        return errorDescriptionStore.getErrorNum();
    }

    /**
     * 获取小车充电次数
     * @return
     */
    public int getChargeNum() {
        return chargeInfoDataStore.getChargeNum();
    }

    /**
     * 获取小车低电量次数
     * @return
     */
    public int getLowBatteryNum() {
        return lowBatteryDataStore.getLowBatteryNum();
    }

    /**
     * 获取小车执行任务数量
     * @return
     */
    public int getTaskNum() {
        return execTaskDataStore.getDeviceTaskNum();
    }

    /**
     * 获取当天任务时间
     * @return
     */
    public int getTodayDeviceWorkTime() {
        return (int) deviceTaskInforMationStore.findDeviceTaskInfoData().getExecTodayTaskTime();
    }

    /**
     * 获取总的任务时间
     * @return
     */
    public long getDeviceWorkTime() {
        return deviceTaskInforMationStore.findDeviceTaskInfoData().getExecAllTaskTime();
    }

    /**
     * 获取入库任务数量
     * @param startTime
     * @param endTime
     * @return
     */
    public int getDeviceInCargoTaskNum(Date startTime, Date endTime) {
        return execTaskDataStore.getDeviceInCargoTaskNum(startTime, endTime);
    }

    /**
     * 获取出库任务数量
     * @param startTime
     * @param endTime
     * @return
     */
    public int getDeviceOutCargoTaskNum(Date startTime, Date endTime) {
        return execTaskDataStore.getDeviceOutCargoTaskNum(startTime, endTime);
    }

    /**
     * 获取移库任务数量
     * @param startTime
     * @param endTime
     * @return
     */
    public int getDeviceTransCargoTaskNum(Date startTime, Date endTime) {
        return execTaskDataStore.getDeviceTransCargoTaskNum(startTime, endTime);
    }
}
